package com.bailian.system.mapper;

import java.util.List;
import com.bailian.system.domain.BlWarehouse;
import com.bailian.system.domain.vo.BLWareHouseVo;
import com.bailian.system.domain.BlWarehouseType;
import org.apache.ibatis.annotations.Param;

/**
 * 仓库基础信息Mapper接口
 * 
 * @author bailian
 * @date 2025-08-04
 */
public interface BlWarehouseMapper 
{
    /**
     * 查询仓库基础信息
     * 
     * @param warehouseId 仓库基础信息主键
     * @return 仓库基础信息
     */
    public BlWarehouse selectBlWarehouseByWarehouseId(Long warehouseId);

    /**
     * 查询仓库基础信息列表
     * 
     * @param blWarehouse 仓库基础信息
     * @return 仓库基础信息集合
     */
    public List<BlWarehouse> selectBlWarehouseList(BlWarehouse blWarehouse);

    /**
     * 新增仓库基础信息
     * 
     * @param blWarehouse 仓库基础信息
     * @return 结果
     */
    public int insertBlWarehouse(BlWarehouse blWarehouse);

    /**
     * 修改仓库基础信息
     * 
     * @param blWarehouse 仓库基础信息
     * @return 结果
     */
    public int updateBlWarehouse(BlWarehouse blWarehouse);

    /**
     * 删除仓库基础信息
     * 
     * @param warehouseId 仓库基础信息主键
     * @return 结果
     */
    public int deleteBlWarehouseByWarehouseId(Long warehouseId);

    /**
     * 批量删除仓库基础信息
     * 
     * @param warehouseIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBlWarehouseByWarehouseIds(Long[] warehouseIds);

    /**
     * 查询仓库基础信息VO列表
     * 
     * @param blWarehouse 仓库基础信息
     * @return 仓库基础信息VO集合
     */
    public List<BLWareHouseVo> selectBLWareHouseVoList(BlWarehouse blWarehouse);

    /**
     * 查询仓库基础信息VO
     * 
     * @param warehouseId 仓库基础信息主键
     * @return 仓库基础信息VO
     */
    public BLWareHouseVo selectBLWareHouseVoByWarehouseId(Long warehouseId);

    /**
     * 调试：查询仓库基础信息（不包含关联查询）
     * 
     * @param warehouseId 仓库ID
     * @return 仓库基础信息
     */
    public BlWarehouse selectWarehouseBasicInfo(Long warehouseId);

    /**
     * 调试：查询仓库类型信息
     * 
     * @param typeId 类型ID
     * @return 仓库类型信息
     */
    public BlWarehouseType selectWarehouseTypeInfo(Long typeId);

    /**
     * 调试：使用原生SQL查询仓库类型信息
     * 
     * @param typeId 类型ID
     * @return 仓库类型信息
     */
    public BlWarehouseType selectWarehouseTypeInfoRaw(Long typeId);

    // ========= 中间表维护 =========
    int deleteWarehouseTagsByWarehouseId(Long warehouseId);
    int batchInsertWarehouseTags(@Param("warehouseId") Long warehouseId, @Param("tagIds") List<Long> tagIds);
    List<Long> selectWarehouseTagIdsByWarehouseId(Long warehouseId);
}
